Edge cache segment prefetching

ABSTRACT

Devices, computer-readable media, and methods for pre-loading video chunks of a video program at an edge server are disclosed. For example, a processor may receive a manifest file for a video program, determine a bitrate for a first segment of the video program, request a video chunk of the first segment at the first bitrate from an edge server in accordance with the manifest file, and request a subset of a video chunk of a second segment of the video program from the edge server.

This patent arises from a continuation of U.S. patent application Ser.No. 17/334,411, filed on May 28, 2021, which is a continuation of U.S.patent application Ser. No. 16/827,093, filed on Mar. 23, 2020, now U.S.Pat. No. 11,025,740, which is a continuation of U.S. patent applicationSer. No. 15/440,387, filed on Feb. 23, 2017, now U.S. Pat. No.10,601,946, all of which are herein incorporated by reference in theirentirety.

The present disclosure relates generally to adaptive bitrate streamingvideo programs, and more particularly to devices, non-transitorycomputer-readable media, and methods for pre-loading video chunks of avideo program at an edge server and for pre-fetching video chunks of avideo program.

BACKGROUND

Video delivery technology has shifted from connection-oriented videotransport protocols such as Real Time Messaging Protocol (RTMP) and RealTime Streaming Protocol (RTSP) to connectionless, e.g., HypertextTransfer Protocol (HTTP)-based, adaptive streaming protocols, such asMoving Picture Experts Group (MPEG) Dynamic Adaptive Streaming over HTTP(DASH). A common feature of HTTP-based adaptive streaming protocols isthe storage and delivery of a video program in multiple files (chunks)associated with segments of the video program and having differentencoding bitrates, with the files linked together by a manifest file, or“index file” that defines all of the segments, and the available videochunks for the segments of the video program.

SUMMARY

In one example, the present disclosure describes a device,computer-readable medium and method for pre-loading video chunks of avideo program at an edge server. For instance, in one example, aprocessor may receive a manifest file for a video program, determine abitrate for a first segment of the video program, request a video chunkof the first segment at the first bitrate from an edge server inaccordance with the manifest file, and request a subset of a video chunkof a second segment of the video program from the edge server.

In another example, the present disclosure describes a device,computer-readable medium and method for pre-fetching video chunks of avideo program. For instance, a processor may receive, from a clientdevice, a request for a video chunk of a first segment of a videoprogram encoded at a first bitrate, retrieve the video chunk of thefirst segment in response to the request, and retrieve a plurality ofvideo chunks of at least a second segment at a plurality of bitratesfrom a source device in response to the request. The processor may alsotransmit the video chunk of the first segment to the client device andstore the video chunks of the at least the second segment at the device.

BRIEF DESCRIPTION OF THE DRAWINGS

The teachings of the present disclosure can be readily understood byconsidering the following detailed description in conjunction with theaccompanying drawings, in which:

FIG. 1 illustrates an example network related to the present disclosure;

FIG. 2 illustrates an example system in accordance with the presentdisclosure;

FIG. 3 illustrates a flowchart of an example method for pre-loadingvideo chunks of a video program at an edge server;

FIG. 4 illustrates a flowchart of an example method for pre-fetchingvideo chunks of a video program; and

FIG. 5 illustrates a high level block diagram of a computing devicespecifically programmed to perform the steps, functions, blocks and/oroperations described herein.

To facilitate understanding, identical reference numerals have beenused, where possible, to designate identical elements that are common tothe figures.

DETAILED DESCRIPTION

A content delivery network (CDN) provides better video quality (shorterstartup time, less video buffering ratio, etc.) when video data isdelivered from CDN edge servers, closer to consuming customers. Intheory, a CDN can provision large storage at all edge servers, but thismay not be economical. An origin server may host from 10,000 to 100,000video programs, where each video program may be comprised of from100,000 to 600,000 component files, or video chunks, based on the videoruntime. In comparison, an edge server, or “edge cache”, typically holdsfar fewer files serving multiple tenants' file delivery purposes,including adaptive bitrate streaming video programs, as well as otherfile types, such as webpages, documents, etc. The current reverse proxymechanism caches only popular titles in edge caches; long tail titlesmay suffer from less than optimum delivery quality, such as long startuptime and high buffering ratio. For instance, a CDN may manage the finitestorage capacity of an edge cache by keeping popular content in the edgecache, evicting less popular titles using a Least Recently Used (LRU)algorithm when the cache is full. LRU is a popular algorithm for theCDN, but may not work best for the content provider. A content providermay have a preferred video it wants to be in the edge cache, such as apay-per-view (PPV) video, or a high resolution video such as a 4K title.In addition, the preferred titles may not be the popular titles in termsof customer download requests. Secondly, the LRU algorithm only helpsmaintain frequently and continuously requested files in the CDN cacheand does not help the experience of the customer first requesting aparticular file from the CDN cache/edge server.

Examples of the present disclosure enable a CDN to serve all titles withreduced delays to the customers, both popular and long tail, directlyfrom CDN edge cache. Thus produces a better video delivery experiencefor the customers. In particular, examples of the present disclosuredeliver video programs with reduced latency time to initiate a videoplayback experience, as well as reduce buffering while playing back thevideo. In one example, a client device may trigger a CDN edge server topreload video chunks for the next N segments of a video program, forexample, two segments of a video program, into the edge server, beforethe client device actually requests the video chunks. No bandwidth tothe client device is used to retrieve the prefetched video chunks untilsuch a time as the client device is ready to pull the video chunks intothe client device's video buffer.

When the video chunks are in fact requested, the video chunks mayalready be stored at the CDN edge server. In one example, the clientdevice causes the CDN edge server the preload the video chunks a splitsecond to just a few seconds before it is anticipated that delivery ofthe video chunks to the client device will be requested, such as 0.5 to4 seconds prior to the anticipated request. In one example, a pre-fetchwindow may be empirically determined for the particular application andthen maintained in use. For example, video chunks for the upcoming next4 seconds of segments of the video program may be maintained asprefetched in the edge server beyond the segment currently requested bythe client device for actual delivery. In another example, the windowand prefetch time is dynamically adjusted to optimize the customerexperience.

In accordance with the foregoing, in one example a client sideapplication, e.g., an adaptive bitrate streaming video player, maysignal to a CDN edge server of the upcoming video chunks. That is, inaddition to requesting a video chunk for a segment, the clientdevice/application may also signal, but does not request, video chunksfor the next X subsequent segments at the requested bitrate and itsadjacent bitrate(s). In one example, the present disclosure may bereferred to as a pre-fetch proxy, which may comprise a new feature addedto the client device video player, or a feature of the application oroperating system of the client device. In another example, a CDN edgeserver, upon being requested to provide a segment N of bitrate B, inaddition to fulfilling the request may also request video chunks of thenext X subsequent segments at the requested bitrate and its adjacentbitrates. In this example, a client application may continue to functionwithout modification, while enjoying the advantages of the presentdisclosure through enhancements to the CDN edge server. In eitherexample, the implementations help to guarantee the availability at theedge server of video chunks anticipated to be requested in the nearfuture, without overloading the edge server with the entire or nearlythe entire video program.

It should be noted that in a different example, a CDN edge cache couldpre-load all video chunks of a video program in response to a requestfor a manifest file or in response to a request for a video chunk of afirst segment. However, this is inefficient because not all users maywatch the entire video program. In addition, an aggressive LRU algorithmcould delete video chunks for upcoming segments before requested by theclient device, due to the long runtime of many videos and the finitestorage limits at the edge cache. In contrast, examples of the presentdisclosure pull video chunks from the next one or several segments, andfrom plus or minus one, or plus or minus two adjacent bitrates. Thus,the wasted bandwidth/overhead if a user stops viewing the video programis limited to the one to several segment “look-ahead” window.

Another solution involves continuous pulling with client simulators tokeep preferred content in the edge cache. This process is resourceintensive as it requires multiple client simulators downloading contentfrom the CDN. In addition, if used to download all available content,the total storage required for all content may exceed the edge cachecapacity. Thus, the simulated download titles may evict each other outof the edge cache. In contrast, examples of the present disclosureleverage the sequential data structure into which video programs aresegmented to enable the streaming of both popular and long tail videoprograms directly from CDN edge servers to client devices, withoutincurring the expensive cost of storing of entire video programs in theCDN edge servers. Examples of the present disclosure improve the clientplayout bitrate and startup time, and reduce the buffering ratio, to theextent similar to where all content is stored at the CDN edge servers.These and other aspects of the present disclosure are described ingreater detail below in connection with the examples of FIGS. 1-5 .

To better understand the present disclosure, FIG. 1 illustrates anexample network 100, related to the present disclosure. As shown in FIG.1 , the network 100 connects mobile devices 157A, 157B, 167A and 167B,and home network devices such as home gateway 161, set-top boxes (STBs)162A and 162B, television (TV) 163A and TV 163B, home phone 164, router165, personal computer (PC) 166, and so forth, with one another and withvarious other devices via a core network 110, a wireless access network150 (e.g., a cellular network), an access network 120, other networks140, content distribution network (CDN) 170, and/or the Internet ingeneral. For instance, connections between core network 110, accessnetwork 120, home network 160, CDN 170, wireless access network 150 andother networks 140 may comprise the Internet in general, internal linksunder the control of single telecommunication service provider network,links between peer networks, and so forth.

In one embodiment, wireless access network 150 comprises a radio accessnetwork implementing such technologies as: Global System for MobileCommunication (GSM), e.g., a Base Station Subsystem (BSS), or IS-95, aUniversal Mobile Telecommunications System (UMTS) network employingWideband Code Division Multiple Access (WCDMA), or a CDMA3000 network,among others. In other words, wireless access network 150 may comprisean access network in accordance with any “second generation” (2G),“third generation” (3G), “fourth generation” (4G), Long Term Evolution(LTE) or any other yet to be developed future wireless/cellular networktechnology. While the present disclosure is not limited to anyparticular type of wireless access network, in the illustrative example,wireless access network 150 is shown as a UMTS terrestrial radio accessnetwork (UTRAN) subsystem. Thus, elements 152 and 153 may each comprisea Node B or evolved Node B (eNodeB). In one example, wireless accessnetwork 150 may be controlled and/or operated by a same entity as corenetwork 110.

In one example, each of mobile devices 157A, 157B, 167A, and 167B maycomprise any subscriber/customer endpoint device configured for wirelesscommunication such as a laptop computer, a Wi-Fi device, a PersonalDigital Assistant (PDA), a mobile phone, a smartphone, an email device,a computing tablet, a messaging device, and the like. In one example,any one or more of mobile devices 157A, 157B, 167A, and 167B may haveboth cellular and non-cellular access capabilities and may further havewired communication and networking capabilities.

As illustrated in FIG. 1 , network 100 includes a core network 110. Inone example, core network 110 may combine core network components of acellular network with components of a triple play service network; wheretriple play services include telephone services, Internet services andtelevision services to subscribers. For example, core network 110 mayfunctionally comprise a fixed mobile convergence (FMC) network, e.g., anIP Multimedia Subsystem (IMS) network. In addition, core network 110 mayfunctionally comprise a telephony network, e.g., an InternetProtocol/Multi-Protocol Label Switching (IP/MPLS) backbone networkutilizing Session Initiation Protocol (SIP) for circuit-switched andVoice over Internet Protocol (VoIP) telephony services. Core network 110may also further comprise a broadcast television network, e.g., atraditional cable provider network or an Internet Protocol Television(IPTV) network, as well as an Internet Service Provider (ISP) network.The network elements 111A-111D may serve as gateway servers or edgerouters to interconnect the core network 110 with other networks 140,wireless access network 150, access network 120, and so forth. As shownin FIG. 1 , core network 110 may also include a plurality of television(TV) servers 112, and a plurality of application servers 114. For easeof illustration, various additional elements of core network 110 areomitted from FIG. 1 .

With respect to television service provider functions, core network 110may include one or more television servers 112 for the delivery oftelevision content, e.g., a broadcast server, a cable head-end, and soforth. For example, core network 110 may comprise a video super huboffice, a video hub office and/or a service office/central office. Inthis regard, television servers 112 may include content server(s) tostore scheduled television broadcast content for a number of televisionchannels, video-on-demand programming, local programming content, and soforth. Alternatively, or in addition, content providers may streamvarious contents to the core network 110 for distribution to varioussubscribers, e.g., for live content, such as news programming, sportingevents, and the like. Television servers 112 may also includeadvertising server(s) to store a number of advertisements that can beselected for presentation to viewers, e.g., in the home network 160 andat other downstream viewing locations. For example, advertisers mayupload various advertising content to the core network 110 to bedistributed to various viewers. Television servers 112 may also includeinteractive TV/video-on-demand (VOD) server(s), as described in greaterdetail below.

In one example, the access network 120 may comprise a Digital SubscriberLine (DSL) network, a broadband cable access network, a Local AreaNetwork (LAN), a cellular or wireless access network, a 3^(rd) partynetwork, and the like. For example, the operator of core network 110 mayprovide a cable television service, an IPTV service, or any other typeof television service to subscribers via access network 120. In thisregard, access network 120 may include a node 122, e.g., a mini-fibernode (MFN), a video-ready access device (VRAD) or the like. However, inanother example, node 122 may be omitted, e.g., forfiber-to-the-premises (FTTP) installations. Access network 120 may alsotransmit and receive communications between home network 160 and corenetwork 110 relating to voice telephone calls, communications with webservers via other networks 140, content distribution network (CDN) 170and/or the Internet in general, and so forth. In another example, accessnetwork 120 may be operated by a different entity from core network 110,e.g., an Internet service provider (ISP) network.

Alternatively, or in addition, the network 100 may provide televisionservices to home network 160 via satellite broadcast. For instance,ground station 130 may receive television content from televisionservers 112 for uplink transmission to satellite 135. Accordingly,satellite 135 may receive television content from ground station 130 andmay broadcast the television content to satellite receiver 139, e.g., asatellite link terrestrial antenna (including satellite dishes andantennas for downlink communications, or for both downlink and uplinkcommunications), as well as to satellite receivers of other subscriberswithin a coverage area of satellite 135. In one example, satellite 135may be controlled and/or operated by a same network service provider asthe core network 110. In another example, satellite 135 may becontrolled and/or operated by a different entity and may carrytelevision broadcast signals on behalf of the core network 110.

As illustrated in FIG. 1 , core network 110 may include variousapplication servers 114. For instance, application servers 114 may beimplemented to provide certain functions or features, e.g., aServing-Call Session Control Function (S-CSCF), a Proxy-Call SessionControl Function (P-CSCF), or an Interrogating-Call Session ControlFunction (I-CSCF), one or more billing servers for billing one or moreservices, including cellular data and telephony services, wire-linephone services, Internet access services, and television services.Application servers 114 may also include a Home Subscriber Server/HomeLocation Register (HSS/HLR) for tracking cellular subscriber devicelocation and other functions. An HSS refers to a network elementresiding in the control plane of an IMS network that acts as a centralrepository of all customer specific authorizations, service profiles,preferences, etc. Application servers 114 may also include an IMS mediaserver (MS) for handling and terminating media streams to provideservices such as announcements, bridges, and Interactive Voice Response(IVR) messages for VoIP and cellular service applications. The MS mayalso interact with customers for media session management. In addition,application servers 114 may also include a presence server, e.g., fordetecting a presence of a user. For example, the presence server maydetermine the physical location of a user or whether the user is“present” for the purpose of a subscribed service, e.g., online for achatting service and the like. In one example, application servers 114may include data storage servers to receive and store manifest filesregarding adaptive bitrate streaming video programs maintained within TVservers 112 and/or available to subscribers of core network 110 andstored in server(s) 149 in other networks 140. It should be noted thatthe foregoing are only several examples of the types of relevantapplication servers 114 that may be included in core network 110 forstoring information relevant to providing various services tosubscribers.

In accordance with the present disclosure, other networks 140 andservers 149 may comprise networks and devices of various contentproviders of adaptive bitrate streaming video programs. In one example,each of servers 149 may also make available manifest files whichdescribe the segments and/or video chunks of various video programsstored on the respective one of the servers 149. In particular, asegment may comprise a portion of a video program, such as a 2-10 secondportion, for example. A video chunk may comprise an actual data filecontaining video and/or audio for a segment that is encoded at aparticular bitrate. For instance, there may be several video chunkscontaining video and audio for the same segment of the video program,but which are encoded at different bitrates in accordance with anadaptive bitrate streaming protocol. Thus, an adaptive bitrate streamingvideo player may request and obtain any one of the different videochunks for a segment, e.g., depending upon a state of a video buffer ofthe adaptive bitrate streaming video player, depending upon networkconditions, depending upon the access rights of the adaptive bitratestreaming video player to different encoding bitrates according to asubscription plan and/or for the particular video program, and so forth.

In one example, home network 160 may include a home gateway 161, whichreceives data/communications associated with different types of media,e.g., television, phone, and Internet, and separates thesecommunications for the appropriate devices. The data/communications maybe received via access network 120 and/or via satellite receiver 139,for instance. In one example, television data is forwarded to set-topboxes (STBs)/digital video recorders (DVRs) 162A and 162B to be decoded,recorded, and/or forwarded to television (TV) 163A and TV 163B forpresentation. Similarly, telephone data is sent to and received fromhome phone 164; Internet communications are sent to and received fromrouter 165, which may be capable of both wired and/or wirelesscommunication. In turn, router 165 receives data from and sends data tothe appropriate devices, e.g., personal computer (PC) 166, mobiledevices 167A, and 167B, and so forth. In one example, router 165 mayfurther communicate with TV (broadly a display) 163A and/or 163B, e.g.,where one or both of the televisions is a smart TV. In one example,router 165 may comprise a wired Ethernet router and/or an Institute forElectrical and Electronics Engineers (IEEE) 802.11 (Wi-Fi) router, andmay communicate with respective devices in home network 160 via wiredand/or wireless connections.

In one example, one or both of the STB/DVR 162A and STB/DVR 162B maycomprise a computing system or server, such as computing system 500depicted in FIG. 5 , and may be configured to provide one or moreoperations or functions for pre-loading video chunks of a video programat an edge server. Among other functions, STB/DVR 162A and STB/DVR 162Bmay comprise adaptive bitrate streaming video players capable of playingadaptive bitrate streaming video programs in formats such as MovingPicture Expert Group (MPEG) .mpeg files, .mov files, .mp4 files, .3gpfiles, .f4f files, .m3u8 files, or the like. It should be noted that asused herein, the terms “configure” and “reconfigure” may refer toprogramming or loading a computing device withcomputer-readable/computer-executable instructions, code, and/orprograms, e.g., in a memory, which when executed by a processor of thecomputing device, may cause the computing device to perform variousfunctions. Such terms may also encompass providing variables, datavalues, tables, objects, or other data structures or the like which maycause a computer device executing computer-readable instructions, code,and/or programs to function differently depending upon the values of thevariables or other data structures that are provided. A flowchart of anexample method of pre-loading video chunks of a video program at an edgeserver is illustrated in FIG. 3 and described in greater detail below.Although STB/DVR 162A and STB/DVR 162B are illustrated and described asintegrated devices with both STB and DVR functions, in other, further,and different examples, STB/DVR 162A and/or STB/DVR 162B may compriseseparate STB and DVR devices.

It should be noted that in one example, another device may provide oneor more operations or functions for pre-loading video chunks of a videoprogram at an edge server, as described herein, and may compriseadaptive bitrate streaming video players capable of playing adaptivebitrate streaming video programs. For instance, one or more of mobiledevices 157A, 157B, 167A and 167B, and/or PC 166 may also comprise acomputing system, such as computing system 500 depicted in FIG. 5 , andmay be configured to provide one or more operations or functions forpre-loading video chunks of a video program at an edge server, asdescribed herein.

Network 100 may also include a content distribution network (CDN) 170.In one example, CDN 170 may be operated by a different entity from corenetwork 110. In another example, CDN 170 may be operated by a sameentity as core network 110, e.g., a telecommunication service provider.In one example, the CDN 170 may comprise a collection of cache serversdistributed across a large geographical area and organized in a tierstructure. The first tier may comprise a group of servers that accesscontent web servers (origin servers) to pull content into the CDN 170,referred to as an ingestion servers, e.g., ingest server 172. Thecontent may include video programs, content of various webpages,electronic documents, video games, etc. A last tier may comprise cacheservers which deliver content to end user, referred to as edge caches,or edge servers, e.g., edge server 174. For ease of illustration, asingle ingest server 172 and a single edge server 174 are shown in FIG.1 . In between the ingest server 172 and edge server 174, there may beseveral layers of servers (omitted from the illustrations), referred toas the middle tier. In one example, the edge server 174 may bemulti-tenant, serving multiple content providers, such as core network110, content providers associated with server(s) 149 in other network(s)140, and so forth. In one example, edge server 174 may comprise anadaptive bitrate streaming video server. In addition, in one example,edge server 174 may comprise a computing system or server, such ascomputing system 500 depicted in FIG. 5 , and may be configured toprovide one or more operations or functions for pre-fetching videochunks of a video program. A flowchart of an example method ofpre-fetching video chunks of a video program is illustrated in FIG. 4and described in greater detail below.

As mentioned above, TV servers 112 in core network 110 may also includeone or more interactive TV/video-on-demand (VOD) servers. In oneexample, an interactive TV/VOD server may comprise a computing system orserver, such as computing system 500 depicted in FIG. 5 , and may beconfigured to provide one or more operations or functions to supportpre-loading video chunks of a video program at an edge server and/orpre-fetching video chunks of a video program, as described herein. Amongother things, an interactive TV/VOD server may function a server forSTB/DVR 162A and/or STB/DVR 162B, one or more of mobile devices 157A,157B, 167A and 167B, and/or PC 166 operating as a client for requestingand receiving a manifest file for an adaptive bitrate streaming videoprogram, as described herein. For example, STB/DVR 162A may present auser interface and receive one or more inputs (e.g., via remote control168A) for a selecting of an adaptive bitrate streaming video program.STB/DVR 162A may request the video program from an interactive TV/VODserver, which may retrieve the manifest file for the video program fromone or more of application servers 114 and provide the manifest file toSTB/DVR 162A. STB/DVR 162A may then obtain video chunks of videosegments of the video program as identified in the manifest file.

In one example, the manifest file may direct the STB/DVR 162A to obtainthe video chunks from edge server 174 in CDN 170. The edge server 174may already store the video chunks of the video program and may deliverthe video chunks upon a request from the STB/DVR 162A. However, if theedge server 174 does not already store the video chunks, upon requestfrom the STB/DVR 162A, the edge server 174 may in turn request the videochunks from an origin server. The origin server which stores chunks ofthe video program may comprise, for example, one of servers 149 or oneof TV servers 112. The chunks of the video program may be obtain from anorigin server via ingest server 172 before passing to edge server 174.In one example, the ingest server 172 may also pass the video chunks toother middle tier servers and/or other edge servers (not shown) of CDN170. The edge server 174 may then deliver the video chunks to theSTB/DVR 162A and may store the video chunks until the video chunks areremoved or overwritten from the edge server 174 according to any numberof criteria, such as a least recently used (LRU) algorithm fordetermining which content to keep in the edge server 174 and whichcontent to delete and/or overwrite.

It should be noted that a similar process may involve other devices,such as TV 163A or TV 163B (e.g., “smart” TVs), mobile devices 176A,167B, 157A or 157B obtaining a manifest file for a video program fromone of TV servers 112, from one of servers 149, etc., and requesting andobtaining video chunks of the video program from edge server 174 of CDN170. In this regard, it should be noted that edge server 174 maycomprise a server that is closest to the requesting devicegeographically or in terms of network latency, throughput, etc., orwhich may have more spare capacity to serve the requesting device ascompared to other edge servers, which may otherwise best serve the videoprogram to the requesting device, etc. However, depending upon thelocation of the requesting device, the access network utilized by therequesting device, and other factors, the chunks of the video programmay be delivered via various networks, various links, and/or variousintermediate devices. For instance, in one example, edge server 174 maydeliver video chunks to a requesting device in home network 160 viaaccess network 120, e.g., an ISP network. In another example, edgeserver 174 may deliver video chunks to a requesting device in homenetwork 160 via core network 110 and access network 120. In stillanother example, edge server 174 may deliver video chunks to arequesting device such as mobile device 157A or 157B via core network110 and wireless access network 150.

Further details regarding the functions that may be implemented by edgeserver 174, STBs/DVRs 162A and 162B, mobile devices 157A, 157B, 167A and167B, and/or PC 166 are discussed in greater detail below in connectionwith the examples of FIGS. 2-5 . In addition, those skilled in the artwill realize that the network 100 may be implemented in a different formthan that which is illustrated in FIG. 1 , or may be expanded byincluding additional endpoint devices, access networks, networkelements, application servers, etc. without altering the scope of thepresent disclosure. For example, core network 110 is not limited to anIMS network. Wireless access network 150 is not limited to a UMTS/UTRANconfiguration. Similarly, the present disclosure is not limited to anIP/MPLS network for VoIP telephony services, or any particular type ofbroadcast television network for providing television services, and soforth.

FIG. 2 illustrates an example system 200 according to the presentdisclosure. As illustrated in FIG. 2 , the system 200 includes a contentdistribution network (CDN) 270, a client device 280, and an originserver 290. The CDN 270 may be the same or similar to the CDN 170 inFIG. 1 . The client device 280 may comprise any number of devices such,as a set-top box (STB), a smart TV, a desktop computer, a laptopcomputer, a tablet, a smartphone, or the like that includesfunctionality of an adaptive bitrate streaming video client. The originserver 290 may be operated by a same entity or a different entity as CDN270 and may store various video programs in accordance with an adaptivebitrate streaming protocol. In other words, the origin server 290 maystore a plurality of video chunks for each of a plurality of segments ofa video program. In one example, the origin server 290 may also storeand make available manifest files for different adaptive bitratestreaming video programs. In another example, the origin server 290 maycreate manifest files in response to a request for a video program froma particular client device. For instance, a different manifest file maybe provided to client device 280 as compared to a different clientdevice, e.g., depending upon the capabilities of the client device 280,based upon rights of the client device according to a subscription,purchase or rental of the video program, based upon a location of theclient device 280, based upon the availability and/or capability of CDN270 and/or edge server 274, and so forth. In another example, clientdevice 280 may obtain a manifest file for a video program from adifferent source, such as server 212. For instance, server 212 may beoperated by a telecommunication service provider or streaming videoservice provider of which a user of client device 280 is a subscriber,while origin server 290 may be associated with a content creator and/orcontent provider, such as a network providing broadcast and on-demandprogramming to subscribers of the telecommunication service providernetwork and/or streaming video service provider.

In one example, a manifest file for a video program may direct clientdevice 280 to obtain video chunks of the video program from edge server274, which may or may not already have stored copies of video chunks ofthe video program. The manifest file, for example, may provide uniformresource locators (URLs) and/or uniform resource identifiers (URIs) fordifferent video chunks which resolve to the edge server 274. Thus, anadaptive bitrate streaming video client of the client device 280 mayobtain the video chunks from edge server 274 as an adaptive bitratestreaming video server. However, it should be noted that in one example,edge server 274 may be unmodified but still support examples of thepresent disclosure for pre-loading video chunks of a video program at anedge server, e.g., by client device 280. For instance, edge server 274may simply obtain and/or deliver the files comprising requested videochunks like any other file stored on the edge server 274.

An example of client device 280 obtaining and playing a video programmay proceed as follows. Client device 280 may have an application tobrowse and select a video program that is being made available by originserver 290 and/or server 212. In response to a selection of a particularvideo program, origin server 290 or server 212 may provide a manifestfile for the video program to client device 212. For purposes of thepresent example, the manifest file may provide URLs for different videochunks of the video program which resolve to the edge server 274.Alternatively, or in addition, the manifest file may provide URIs fordifferent video chunks of the video program along with instructionsdirecting the client device 280 to request the files associated with theURIs from edge server 274.

Edge server 274 may or may not store one or more video chunks of thevideo program. In particular, edge server 274 may have a limitedcapacity and cannot store all content that may be requested by clientdevices that may be serviced by the edge server 274. For instance, edgeserver 274 may evict stale content via a least recently used (LRU)algorithm or the like. When initially receiving the manifest file, theclient device 280 may request one or more video chunks of one or moresegments of the video file from the edge server 274 in accordance withthe manifest file. As mentioned above, a segment of a video program mayhave multiple video chunks associated therewith having differentencoding bitrates, and hence different qualities of video and/or audio.The client device 280 may select an initial encoding bitrate based upona variety of factors which may include: the capabilities of the clientdevice 280, e.g., in terms of maximum processor speed, memory capacity,maximum screen resolution, etc., network conditions, such as latency,bandwidth, throughput, etc., access rights of the client device 280 tothe video program, and so forth. In one example, the client device 280may request a plurality of video chunks of the video program associatedwith a plurality of different sequential segments to initially fill avideo buffer of the client device. For example, the video buffer may befiled so that the client device 280 may obtain further video chunks forsubsequent segments of the video program at a highest bitratesustainable per the client device capabilities and/or networkconditions, to maintain the video buffer occupancy level, or tootherwise avoid a stall in the presentation of the video program.

In response to the request for one or more video chunks, the edge server274 may first determine whether all or a portion of the requested videochunks are available at the edge server 274. If the edge server 274already stores a requested video chunk, the edge server 274 may deliverthe video chunk to the client device 280. If the edge server 274 doesnot possess a requested video chunk, the edge server 274 may request thevideo chunk from the CDN 270 and/or from the origin server 290. Forinstance, the edge server 274 may transmit a request to origin server290 for the video chunk. In one example, the request may pass viaingress server 272 and/or one or more mid-tier servers, such as mid-tierservers 276 and/or 278. In one example, the request may be interceptedby one of the mid-tier servers 276 or 278, or ingress server 272. If theintercepting device has stored thereon a copy of the requested videochunk, the intercepting device may return the video chunk to edge server274 in response to the request. Otherwise, the request may be passed tothe origin server 290.

In another example, an edge server 274 may broadcast a request topeer-devices within CDN 270 to determine a closest copy of the videochunk. The edge server 274 may then obtain the video chunk from anyresponding device of the CDN, such as mid-tier server 276 or 278,another edge server (not shown), ingress server 272, etc. If, however,there is no device of the CDN 270 that responds, the edge server 274 maythen send the request to origin server 290. In one example, the originserver 290 may return the requested video chunk(s) to ingress server272, which may forward the video chunk(s) to edge server 274, and whichmay also store the video chunk(s) and/or distribute the video chunk(s)to other devices in CDN 270. For example, the video chunk(s) may beforwarded to edge server 274 via mid-tier server 276, which may storethe video chunk(s) before or at the same time as passing the videochunk(s) to edge server 274. Thus, if another edge server of CDN 270requests the same video chunk(s), it may be more efficient to obtain thevideo chunk(s) from mid-tier server 276 than to re-populate the videochunk(s) into CDN 270 from the origin server 290.

In any event, client device 280 may obtain an initial set of one or morevideo chunks for one or more segments of the video program and beginplaying the video program from the video buffer. As the client device280 plays one or more of the video chunks, it may also obtain additionalvideo chunks for subsequent segments of the video program from the edgeserver 274. The edge server 274 may again fulfill the request from videochunks that are already stored at edge server 274, or ma obtain thevideo chunks from other devices in CDN 270 and/or from origin server290. However, it should be noted that when the video chunks are notalready stored at edge server 274, a presentation of the video programat client device 280 is more susceptible to a buffer stall, delay,degradation of quality (e.g., dropping to a lower encoding bit rate),and so forth. In particular, the number of network hops, e.g., from edgeserver 274 to origin server 290, the distances between such devices andany intermediate devices, and so forth, may all contribute tounanticipated and/or unavoidable delays, congestion, etc.

In accordance with the present disclosure, client device 280 may causeedge server 274 to pre-load one or more video chunks into the edgeserver 274 (e.g., an “edge cache”) prior to the client device 280requesting actual delivery of the video chunk(s) from the edge server274 to the client device 280. In one example, the edge server 274 mayinclude an interface to accept a command from the client device 280 topre-load one or more video chunks, that is, to obtain the video chunksfrom origin server 290 or from elsewhere in CDN 270, and to store thevideo chunks at edge server 274, without delivery of the video chunk(s)to the client device 280. The client device 280 may subsequently requestone or more of the video chunk(s) as the client device 280 determines itis suitable to place the video chunk(s) into the video buffer of theclient device 280. The edge server 274 may then be able to more quicklydeliver the requested video chunk(s), i.e., without having to requestthe video chunk(s) from origin server 290 and/or from other devices inCDN 270.

As mentioned above, edge server 274 may also support examples of thepresent disclosure for pre-loading video chunks of a video program at anedge server, e.g., by client device 280, without modification. Forinstance, in one example the client device 280 may send a message to theedge server 274 in accordance with a Hypertext Transfer Protocol (HTTP)head method, or HTTP head request. The HTTP head method allows a clientto request from a server header information associated with a file,webpage, etc. The server will return the requested information to theclient, without delivering payload data. In the case of an edge serverof a CDN, such as edge server 274, if the edge server 274 does not havethe file for which the header information is being requested, the edgeserver 274 may obtain the file, extract the header information, and sendthe header information to the client device 280. In addition, since theedge server 274 obtains the file, the edge server 274 also stores thefile. Thus, in the case of an HTTP head request pertaining to a videochunk of a video program, the HTTP head request may cause the edgeserver 274 to obtain and store the video chunk, which may be referred toherein as “pre-loading” or “edge loading”. Although some data istransferred over the network form edge server 274 to client device 270in response to the HTTP head request, it is negligible compared to thesize of the entire video chunk. If and when the client device 280requests delivery of the full video chunk, the video chunk may alreadybe stored in the edge server 274 and may be delivered faster than if theedge server 274 had to retrieve the video chunk from the origin server290 or elsewhere within CDN 270.

In another example, the client device 280 may send a message comprisingan HTTP range request (e.g., a byte range request), to the edge server274. The HTTP range request may specific that the edge server 274 returna certain byte range of data from a file, e.g., a video chunk. Similarto the HTTP head method, if the edge server 274 does not already possessthe video chunk for which the byte range is requested, the edge server274 may first obtain the video chunk, extract the data associated withthe byte range that is requested, and send the data from the byte rangeto the client device 280. In addition, the edge server 274 will storethe video chunk. Thus the HTTP range request may also be used to causethe edge server 274 to obtain and store (e.g., pre-load/edge load) thevideo chunk. In accordance with the present disclosure, both the HTTPhead request and the HTTP range request may be considered requests for asubset of a video chunk.

In accordance with the present disclosure, the client device 280 mayutilize any of the above techniques to cause the edge server 274 topreload one or several video chunks associated with a segment of thevideo program. For instance, in one example, if an encoding bitrate of acurrent video chunk being played, a next video chunk queued in the videobuffer, a last video chunk queued in the video buffer, etc. is anencoding bitrate level M, the client device 280 may send a request toedge server 274 to cause edge server 274 to pre-load video chunksassociated with a next segment of the video program, where the videochunks have encoding bitrates levels of M, M−1, and M+1, or M, M−1, M−2,M+1, and M+2, and so forth. Notably, the client device 280 may causepreloading of video chunks for a next segment (or several segments) at acurrent encoding bitrate level as well as one or several encodingbitrate levels above and/or below a current encoding bitrate level.Thus, if the client device 280 determines that conditions warrant movingto a higher encoding bitrate level, or dropping to a lower encodingbitrate level, if and when the client device 280 requests such videochunks from the edge server 274, the edge server 274 may already possesswhichever of the video chunks the client device 280 selects. In oneexample, the number of video chunks and number of encoding bitratelevels associated with a segment that are requested to be preloaded maybe selected by the client device, e.g., based upon the same or differentcriteria as is used to determine which encoding bitrate level toutilize. Similarly, based upon the same or different criteria the clientdevice 280 may select the number of segments for which video chunks maybe requested to be pre-loaded at the same time. In another example, thenumber of video chunks per segment to be pre-loaded and/or the number ofsegments for which video chunks are to be requested to be pre-loaded ata same instance may be set by a network operator, by a devicemanufacturer, by a standards body, by an operator of the CDN 270, etc.

It should be noted that the number of encoding bitrate levels may varyfrom deployment to deployment. For illustrative purposes, in oneexample, there may be eight available encoding bitrate levels. Thus, insome cases the client device 280 may request video chunks having aplurality of different encoding bitrates (or bitrate levels) associatedwith a same segment. However, if an encoding bitrate of a video chunkbeing played or stored in the video buffer of the client device 280 isat a highest available encoding bitrate level, or a lowest availableencoding bitrate level, in one example, the client device 280 may notrequest pre-loading of a video chunk at an encoding bitrate level ofM+1, if already at the highest available encoding bitrate level, or maynot request pre-loading of a video chunk at an encoding bitrate level ofM−1, if already at a lowest available encoding bitrate level. It shouldalso be noted that the same or a similar process may also be followedwith respect to subsequent segments and video chunks of a video programas video chunks are played out of the video buffer of the client device280 and as the client device 280 seeks to populate the video buffer withadditional video chunks of the video program.

In addition, it should be further noted that in another example, theclient device 280 may be unmodified, while edge server 274 may beconfigured to pre-fetching video chunks of a video program, inaccordance with the present disclosure. For instance, in anotherexample, client device 280 may request a plurality of video chunks of avideo program from edge server 274 in accordance with a manifest fileand may begin playing video chunks from a video buffer when the clientdevice 280 determines that the video buffer is at a sufficient levelthat is anticipated to avoid video stalls. The client device 280 maycontinue to request video chunks at a same encoding bitrate, at a higherencoding bitrate, or at a lower encoding bitrate for subsequent segmentsof the video program based upon a variety of criteria, includingchanging network conditions, CPU capacity, memory capacity, etc., at theclient device 280, and so forth. However, is the present example, whenedge server 274 receives a request to deliver a video chunk for aparticular segment, the edge server 274 may also send requests to originserver 290 and/or other devices in CDN 270 to obtain video chunks forone or more subsequent segments of the video program, e.g., a nextsegment, the next segment thereafter, etc. In particular, the edgeserver 274 may request video chunks for the one or more subsequentsegments at a current encoding bitrate level, a next lower encodingbitrate level, an next higher encoding bitrate level, etc. Thus, whenvideo chunks of the one or more subsequent segments of the video programare requested by client device 280, the edge server 274 may alreadypossess the video chunks.

In one example, a client device may be directed to an edge server basedupon the capabilities of the client device and/or the capabilities ofthe edge server in accordance with the present disclosure. For instance,if the client device 280 is configured to utilize HTTP head requests orHTTP range requests to cause an edge server to preload video chunks,client device 280 may be assigned to be served by an edge server thatdoes not include additional functionality in accordance with the presentdisclosure (e.g., edge server 274, in one example). This may beaccomplished by origin server 290 and/or server 212 providing clientdevice 280 with a manifest file that points to edge server 274, forinstance. Conversely, if client device 280 does not possess suchcapabilities but edge server 274 is configured to pre-fetch video chunksof a video program, in accordance with the present disclosure, thenorigin server 290 and/or server 212 may provide client device 280 with amanifest file that points to edge server 274, for example.

The above process(es) helps ensure that video chunks for the nextsegment, the next two segments, the next three segments, etc., for thecurrent requested bitrate and its adjacent bitrates (or next two higherbitrates and next two lower bitrates, etc.) are available in the edgeserver 274. From a content delivery perspective, the result is the sameas if all video chunks are always in the edge server 274. In oneexample, based on video start time latency or rebuffering errors, thenumber of subsequent segments for which video chunks are pre-loaded canbe dynamically adjusted. Rebuffering is when the client device 280 isstarved for segments and must pause the video playback and wait for arequested video chunk to arrive. Given a drop in a video buffermaintained to a full threshold, the client device 280 may drop theencoding bitrate level and request video chunks of a lower encodingbitrate level, as well as request to edge load video chunks for agreater number of subsequent segments following the current segment.Pre-loading video chunks for a larger “window” of segments at the edgeserver 274 may help alleviate network issues impacting the rebufferingerrors, and may also prevent a drop to a lower encoding bitrate. The“window” sizing or “look-ahead” for the number of subsequent segment(s)can also be reduced when the video buffer is maintained between lowbuffer and high buffer thresholds. In one example, a minimum floor limitis maintained for the number of subsequent segments to prefetch, inorder to prevent a situation where the edge server 274 does not have thevideo chunks before being requested by the client device 280.

In one example, the present disclosure may also adjust thepre-loading/pre-fetching “window”, or “look-ahead,” based upon theparticular video program and historical usage information indicating howlong or how much of the video program viewers typically watch beforeabandoning, for example. Historical information may be gleaned from theCDN 270, from a content provider (e.g., an entity associated with originserver 290), or by a third-party that may aggregate historical usageinformation from multiple CDNs and/or content providers, which mayaggregate and analyze historical usage information on behalf of anetwork, a content provider, and/or a CDN, and so forth.

In one example, the present disclosure may also adjust the “look-ahead”based upon a viewer profile, e.g., historical data that may indicatethat some users are more prone to abandon than others. Thus, an amountof segments for which video chunks are pre-loaded may be adjusteddifferently for different viewers. Similarly, some viewers may be knownto be more sensitive to video/audio quality than other. Thus, in oneexample, the number of video chunks at adjacent bitrate encoding levelsthat are pre-loaded may be adjusted depending upon the habits ofdifferent viewers. For example, historical data may indicate that a useralmost never or almost always abandons if the encoding bitrate (and thecorresponding video quality) falls below “X”. Therefore, the clientdevice 280 may not request pre-loading and/or the edge server 274 maynot pre-fetch bit rates below X, even if such bit rate(s) are adjacentor are M−1 & M−2 below the current encoding bitrate level M. Thus, theseand other modifications may be implemented in additional examples of thepresent disclosure.

FIG. 3 illustrates a flowchart of a method 300 for pre-loading videochunks of a video program at an edge server, in accordance with thepresent disclosure. In one example, the method 300 is performed by theclient device 280 of FIG. 2 , any one or more components thereof (e.g.,a processor performing operations stored in and loaded from a memory),or by the client device 280 in conjunction with one or more otherdevices, such as edge server 274, origin server 290, server 212, and soforth. In still another example, the method 400 may be performed by aclient device in FIG. 1 , such as STB/DVR 162A, STB/DVR 162B, one of theTVs 163A and 163B, PC 166, one of the mobile devices 157A, 157B, 167A,or 167B, and so forth, or any one more components thereof, or by one ofthese devices in conjunction with other devices and/or components ofnetwork 100 of FIG. 1 . In one example, the steps, functions, oroperations of method 300 may be performed by a computing device orsystem 500, and/or processor 502 as described in connection with FIG. 5below. For instance, the computing device or system 500 may representany one or more components of a client device in FIG. 1 or FIG. 2 thatis/are configured to perform the steps, functions and/or operations ofthe method 300. For illustrative purposes, the method 300 is describedin greater detail below in connection with an example performed by aprocessor, such as processor 502. The method 300 begins in step 305 andproceeds to step 310.

At step 310, the processor receives a manifest file for a video program.In one example, the manifest file identifies a plurality of video chunksassociated with a plurality of segments of the video program inaccordance with an adaptive bitrate streaming protocol. In one example,the manifest file also identifies an edge server from which theplurality of video chunks may be obtained, e.g., an edge server of acontent distribution network (CDN). For instance, for each segment ofthe plurality of segments, multiple video chunks having a plurality ofdifferent bitrates (e.g., encoding bitrates, or encoding bitrate levels)may be made available by an origin server to the edge server. In oneexample, the manifest file includes URLs for the video chunks that areassociated with the edge server. The manifest file may be received froman origin server of the video program or from another network-basedserver, such as a server of a telecommunication service providernetwork, a server of a streaming video service provider, and so forth.

At step 320, the processor determines a first bitrate for a firstsegment of the video program. In one example, the processor may selectan initial encoding bitrate based upon a variety of factors such as:maximum processor speed, memory capacity, or maximum screen resolution,network conditions, such as latency, bandwidth, throughput, etc., accessrights to the video program, an overall length of the video program, andso forth.

At step 330, the processor requests a video chunk of the first segmentat the first bitrate from an edge server in accordance with the manifestfile. In one example, the processor may request a plurality of videochunks of the video program associated with a plurality of differentsequential segments to initially fill a video buffer to a certainoccupancy level, e.g., so as to be able to maintain the video bufferoccupancy level or to otherwise avoid a stall in the presentation of thevideo program while playing out video chunks and populating video chunksof subsequent segments from the edge server into the buffer. The one ormore video chunks may be encoded at one of a plurality of bitrates(e.g., corresponding to a plurality of encoding bitrate levels inaccordance with the adaptive bitrate streaming protocol). For instance,the processor may select a highest available encoding bitrate (orencoding bitrate level) that is calculated to be sustainable for apresentation of the video program in accordance with a variety ofcriteria, such as network conditions, CPU capacity, memory capacity,access rights to the content, etc. However, it should be noted that inaccordance with the method 300, the “first segment” may not necessarilycomprise the initial segment of the video program. For instance, the“first segment” may be a segment that is in the middle of a sequence ofsegments of the video program. It should also be noted that in oneexample, the edge server may comprise a component of a CDN. However,examples of the present disclosure are not confined to any particularCDN architecture. Thus, in accordance with the present disclosure, anedge server may be any network-based server for delivering content toclient devices that is different from an origin server on which videochunks of an adaptive bitrate streaming video program are stored.

At step 340, the processor requests a subset of a video chunk of asecond segment of the video program from the edge server. In oneexample, the subset of the video chunk may comprise a header of thevideo chunk, or a byte range of the video chunk. For instance, in oneexample, step 340 may comprise the processor sending an HTTP headrequest or an HTTP range request to the edge server regarding a URL orother identifier of the video chunk. In another example, the edge servermay be configured to receive requests to pre-load or edge load videochunks. Accordingly, in such an example, step 340 may comprise theprocessor sending a specific request or command to the edge server topre-load/edge load the video chunk (if not already stored at the edgeserver). In one example, the video chunk of the second segment of thevideo program is encoded at one of a plurality of bitrates (e.g.,corresponding to a plurality of bitrate encoding levels in accordancewith the adaptive bitrate streaming protocol).

Regardless of the manner in which the request is made, the requestingthe subset of the video chunk of the second segment of the video programfrom the edge server may cause the edge server to obtain the video chunkof the second segment of the video program, e.g., from an origin serveror another component of a CDN, and store the video chunk of the secondsegment of the video program at the edge server, when the edge serverdoes not already possess the video chunk. In addition, the requestingthe subset of the video chunk of the second segment of the video programfrom the edge server may cause the edge server to send the subset of thevideo chunk of the second segment of the video program to the device. Atleast a portion of the video chunk of the second segment is not sent bythe edge server to the device in response to the processor requestingthe subset of the video chunk of the second segment of the video programfrom the edge server. In one example, the processor may store the subsetof the video chunk of the second segment, e.g., for later aggregationwith a remaining portion of the video chunk when the processor mayrequest the video chunk from the edge server. However, in anotherexample, the processor may simply ignore or discard the subset of thevideo chunk of the second segment that may be sent by the edge server inresponse to the request that is made at step 340. Following step 340,the method 300 may proceed to optional step 350 or may proceed to step395.

At optional step 350, the processor may request a subset of a secondvideo chunk of the second segment of the video program. The second videochunk of the second segment of the video program may be encoded at asecond bitrate of the plurality of bitrates. For example, the secondbitrate of the plurality of bitrates may comprise a bitrate that is anext higher bitrate or a next lower bitrate to the first bitrate withina range of encoding bitrate levels at which the segments of the videoprogram are encoded into different video chunks. It should be noted thatin one example, optional step 350 may comprise requesting subsets of aplurality of video chunks of the second segment of the video program.For instance, the processor may cause preloading of video chunks for anext segment (or several segments) at a current encoding bitrate levelas well as one or several encoding bitrate levels above and/or below acurrent encoding bitrate level.

At optional step 360, the processor may receive the video chunk of thefirst segment from the edge server. In accordance with the presentdisclosure, the edge server may have pre-loaded the video chunk suchthat the video chunk may be received by the processor without having towait for the edge server to obtain the video chunk from an origin serveror from other components of a CDN in response to the request sent atstep 330.

At optional step 370, the processor may play the video chunk of thefirst segment at the device. For instance, the processor may de-queuethe video chunk from the video buffer and present the video chunk via adisplay and/or a speaker, headphone(s), etc. associated with the deviceof the processor. Following step 340, or one of optional steps 350-370,the method 300 proceeds to step 395 where the method ends.

FIG. 4 illustrates a flowchart of a method 400 for pre-fetching videochunks of a video program, in accordance with the present disclosure. Inone example, the method 400 is performed by the edge server 274 of FIG.2 , any one or more components thereof (e.g., a processor performingoperations stored in and loaded from a memory), or by the edge server274 in conjunction with one or more other devices, such as origin server290, ingress server 272, and so forth. In still another example, themethod 400 may be performed by edge server 174 in FIG. 1 or any one morecomponents thereof, or by edge server 174 in conjunction with otherdevices and/or components of network 100 of FIG. 1 . In one example, thesteps, functions, or operations of method 400 may be performed by acomputing device or system 500, and/or processor 502 as described inconnection with FIG. 5 below. For instance, the computing device orsystem 500 may represent any one or more components of an edge server inFIG. 1 or FIG. 2 that is/are configured to perform the steps, functionsand/or operations of the method 400. For illustrative purposes, themethod 400 is described in greater detail below in connection with anexample performed by a processor, such as processor 502. The method 400begins in step 405 and proceeds to step 410.

At step 410, the processor receives, from a client device, a request fora video chunk of a first segment of a video program, wherein the videochunk of the first segment of the video program is encoded at a firstbitrate. In one example, for each segment of the plurality of segments,multiple video chunks having a plurality of different bitrates (e.g.,encoding bitrates, or encoding bitrate levels) may be made available byan origin server to the processor, e.g., where the processor is aprocessor of an edge server, such as an edge server of a CDN. In oneexample, the first segment may comprise an initial segment of the videoprogram. In another example, the first segment may comprise a segmentfrom the middle of a sequence of segments of the video program.

At step 420, the processor retrieves the video chunk of the firstsegment of the video program in response to the request for the videochunk of the first segment of the video program. In one example, theprocessor may retrieve the video chunk from a local storage, e.g., at orwithin the device of the processor. For instance, the device maycomprise an edge server of a CDN that may already possess the videochunk. For example, the same or a different client device may havealready requested the video chunk, and the video chunk may have beenretained locally according to a least recently used (LRU) algorithm, orthe like. If, however, the video chunk is not already available locally,the processor may retrieve the video chunk of the first segment from asource device such as an origin server that may store the video chunksof the video program. In another example, the source device may compriseanother component of a CDN, such as an ingress server, a mid-tierserver, a peer edge server, etc.

At step 430, the processor retrieves a plurality of video chunks of atleast a second segment of the video program at a plurality of bitratesfrom a source device in response to the request for the video chunk ofthe first segment of the video program. In particular, in accordancewith the present disclosure, the processor may pre-load/edge load videochunks of one or more subsequent segments of the video program inresponse to a request for the video chunk of the first segment. Thevideo chunks of the at least the second segment may be encoded at one ofthe plurality of bitrates, including a same bitrate as the video chunkof the first segment, a bitrate of a next higher encoding bitrate leveland/or a bitrate of a next lower encoding bitrate level according to anadaptive bitrate streaming protocol. In one example, the number of videochunks for the at least the second segment (e.g., the number of encodingbitrate levels) may be selected by the client device, by a contentoriginator, a telecommunication service provider, a streaming videoservice provider, an operation of a CDN, etc., or may be set accordingto a protocol or standards body. In addition, the number of segments ofthe at least a second segment may also be selected by any of theabovementioned entities, or a different entity.

At step 440, the processor transmits the video chunk of the firstsegment of the video program to the client device. In one example, steps430 and 440 may occur in parallel or at substantially the same time.

At step 450, the processor stores the plurality of video chunks of theat least the second segment of the video program at the device. Notably,the plurality of video chunks may be stored locally at the device inanticipation of the client device requesting one or more of the videochunks.

At optional step 460, the processor may receive, from the client device,a request for a video chunk of second segment of the video program atone of the plurality of bitrates. Again, the plurality of video chunksmay be stored locally at the device in anticipation of the client devicerequesting one or more of the video chunks. Thus, at optional step 460,the video chunk of the second segment may be accessed faster than if theprocessor had to retrieve the video chunk from another location. The oneof the plurality of bitrates may be a same bitrate as the video chunk ofthe first segment, or may be a different bitrate, such as a bitrate of anext higher encoding bitrate level or a bitrate of a next lower encodingbitrate level according to an adaptive bitrate streaming protocol.

At optional step 470, the processor may transmit the video chunk of thesecond segment of the video program at the one of the plurality ofbitrates that is stored at the device to the client device.

At optional step 480, the processor may retrieve a plurality of videochunks of at least a third segment of the video program from the sourcedevice in response to the request for the video chunk of the secondsegment of the video program at the one of the plurality of bitrates. Inone example, optional step 470 may comprise retrieving the plurality ofvideo chunks of the at least the third segment of the video program at asecond plurality of bitrates from the source device. In addition, in oneexample, the storing the at least the third segment of the video programcomprises storing the at least the third segment of the video program atthe second plurality of bitrates at the device. The second plurality ofbitrates may comprise, for example, the one of the plurality of bitratesfor the video chunk of the second segment of the video program plusbitrates of a next higher and/or a next lower encoding bitrate level,the next two higher and/or next two lower encoding bitrate levels, etc.

At optional step 490, the processor may store the plurality of videochunks of the at least the third segment of the video program at thedevice. Thus, the plurality of video chunks of the at least the thirdsegment of the video program may be locally available to the processorin anticipation of a request from the client device for one of the videochunks of the at least the third segment. Following step 450, or one ofoptional steps 460-490, the method 400 proceeds to step 495 where themethod ends.

In addition, although not expressly specified above, one or more stepsof the method 300 or the method 400 may include a storing, displayingand/or outputting step as required for a particular application. Inother words, any data, records, fields, and/or intermediate resultsdiscussed in the method can be stored, displayed and/or outputted toanother device as required for a particular application. Furthermore,operations, steps, or blocks in FIG. 3 or FIG. 4 that recite adetermining operation or involve a decision do not necessarily requirethat both branches of the determining operation be practiced. In otherwords, one of the branches of the determining operation can be deemed asan optional step. Furthermore, operations, steps or blocks of the abovedescribed method(s) can be combined, separated, and/or performed in adifferent order from that described above, without departing from theexample embodiments of the present disclosure.

FIG. 5 depicts a high-level block diagram of a computing devicespecifically programmed to perform the functions described herein. Forexample, any one or more components or devices illustrated in FIG. 1 ordescribed in connection with the method 300 or the method 400 may beimplemented as the system 500. As depicted in FIG. 5 , the system 500comprises a hardware processor element 502 (e.g., a microprocessor, acentral processing unit (CPU) and the like), a memory 504, (e.g., randomaccess memory (RAM), read only memory (ROM), a disk drive, an opticaldrive, a magnetic drive, and/or a Universal Serial Bus (USB) drive), amodule 505 for pre-loading video chunks of a video program at an edgeserver and/or for pre-fetching video chunks of a video program, andvarious input/output devices 506, e.g., a camera, a video camera,storage devices, including but not limited to, a tape drive, a floppydrive, a hard disk drive or a compact disk drive, a receiver, atransmitter, a speaker, a display, a speech synthesizer, an output port,and a user input device (such as a keyboard, a keypad, a mouse, and thelike).

Although only one processor element is shown, it should be noted thatthe general-purpose computer may employ a plurality of processorelements. Furthermore, although only one general-purpose computer isshown in the Figure, if the method(s) as discussed above is implementedin a distributed or parallel manner for a particular illustrativeexample, i.e., the steps of the above method(s) or the entire method(s)are implemented across multiple or parallel general-purpose computers,then the general-purpose computer of this Figure is intended torepresent each of those multiple general-purpose computers. Furthermore,one or more hardware processors can be utilized in supporting avirtualized or shared computing environment. The virtualized computingenvironment may support one or more virtual machines representingcomputers, servers, or other computing devices. In such virtualizedvirtual machines, hardware components such as hardware processors andcomputer-readable storage devices may be virtualized or logicallyrepresented.

It should be noted that the present disclosure can be implemented insoftware and/or in a combination of software and hardware, e.g., usingapplication specific integrated circuits (ASIC), a programmable logicarray (PLA), including a field-programmable gate array (FPGA), or astate machine deployed on a hardware device, a general purpose computeror any other hardware equivalents, e.g., computer readable instructionspertaining to the method(s) discussed above can be used to configure ahardware processor to perform the steps, functions and/or operations ofthe above disclosed method(s). In one embodiment, instructions and datafor the present module or process 505 for pre-loading video chunks of avideo program at an edge server and/or for pre-fetching video chunks ofa video program (e.g., a software program comprising computer-executableinstructions) can be loaded into memory 504 and executed by hardwareprocessor element 502 to implement the steps, functions or operations asdiscussed above in connection with the example method 300 or the examplemethod 400. Furthermore, when a hardware processor executes instructionsto perform “operations,” this could include the hardware processorperforming the operations directly and/or facilitating, directing, orcooperating with another hardware device or component (e.g., aco-processor and the like) to perform the operations.

The processor executing the computer readable or software instructionsrelating to the above described method(s) can be perceived as aprogrammed processor or a specialized processor. As such, the presentmodule 505 for pre-loading video chunks of a video program at an edgeserver and/or for pre-fetching video chunks of a video program(including associated data structures) of the present disclosure can bestored on a tangible or physical (broadly non-transitory)computer-readable storage device or medium, e.g., volatile memory,non-volatile memory, ROM memory, RAM memory, magnetic or optical drive,device or diskette and the like. More specifically, thecomputer-readable storage device may comprise any physical devices thatprovide the ability to store information such as data and/orinstructions to be accessed by a processor or a computing device such asa computer or an application server.

While various embodiments have been described above, it should beunderstood that they have been presented by way of example only, and notlimitation. Thus, the breadth and scope of a preferred embodiment shouldnot be limited by any of the above-described example embodiments, butshould be defined only in accordance with the following claims and theirequivalents.

What is claimed is:
 1. A device comprising: a processor; and anon-transitory computer-readable medium storing instructions which, whenexecuted by the processor, cause the processor to perform operations,the operations comprising: obtaining a first request for a first videochunk of a first segment at a first bitrate; obtaining, in response tothe first request, the first video chunk; obtaining, in response to thefirst request, a first copy of a second video chunk of a second segmentat a second bitrate; obtaining, in response to the first request, asecond copy of the second video chunk of the second segment at a thirdbitrate; causing transmission of the first video chunk to a clientdevice; obtaining, from the client device, a second request for thesecond video chunk; and causing transmission of the first copy of thesecond video chunk or the second copy of the second video chunk based onthe second request.
 2. The device of claim 1, wherein the operationsfurther include causing the first copy of the second video chunk and thesecond copy of the second video chunk to be stored.
 3. The device ofclaim 1, wherein the second request includes a range request.
 4. Thedevice of claim 3, wherein the range request comprises a hypertexttransfer protocol range request.
 5. The device of claim 1, wherein thefirst request is sent from a client device handling a manifest filetailored to capabilities of the client device.
 6. The device of claim 5,wherein a uniform resource locator for the first video chunk of thefirst segment and a uniform resource locator for the second video chunkof the second segment are identified in the manifest file, wherein theuniform resource locator for the first video chunk of the first segmentand the uniform resource locator for the second video chunk of thesecond segment are both associated with the device.
 7. The device ofclaim 5, wherein the manifest file is particularly tailored to thedevice based upon at least one of: a capability of the device, asubscription service associated with the device, or a location of thedevice.
 8. The device of claim 1, wherein the device is an edge server.9. The device of claim 1, wherein the operations further include causingstorage of the first video chunk.
 10. The device of claim 1, wherein theoperations further include selecting the one of the first copy of thesecond video chunk or the second copy of the second video chunk fortransmission based on a bitrate identified in the second request. 11.The device of claim 1, wherein the first bitrate is equal to the secondbitrate and the third bitrate is a next higher bitrate.
 12. Anon-transitory computer-readable medium storing instructions which, whenexecuted by a processor of a device, cause the processor to, at least:obtain a first request for a first video chunk of a first segment at afirst bitrate; obtain, in response to the first request, the first videochunk; obtaining, in response to the first request, a first copy of asecond video chunk of a second segment at a second bitrate; obtain, inresponse to the first request, a second copy of the second video chunkof the second segment at a third bitrate; cause transmission of thefirst video chunk to a client device; obtain, from the client device, asecond request for the second video chunk; and cause transmission of thefirst copy of the second video chunk or the second copy of the secondvideo chunk based on the second request.
 13. The non-transitorycomputer-readable medium of claim 12, wherein the instructions, whenexecuted, cause the processor to cause the first copy of the secondvideo chunk and the second copy of the second video chunk to be stored.14. The non-transitory computer-readable medium of claim 12, wherein thesecond request includes a range request.
 15. The non-transitorycomputer-readable medium of claim 14, wherein the range requestcomprises a hypertext transfer protocol range request.
 16. Thenon-transitory computer-readable medium of claim 12, wherein the firstrequest is sent from a client device handling a manifest file tailoredto capabilities of the client device.
 17. The non-transitorycomputer-readable medium of claim 16, wherein a uniform resource locatorfor the first video chunk of the first segment and a uniform resourcelocator for the second video chunk of the second segment are identifiedin the manifest file, wherein the uniform resource locator for the firstvideo chunk of the first segment and the uniform resource locator forthe second video chunk of the second segment are both associated with adevice associated with the processor.
 18. The non-transitorycomputer-readable medium of claim 16, wherein the manifest file isparticularly tailored to the device based upon at least one of: acapability of the device, a subscription service associated with thedevice, or a location of the device.
 19. The non-transitorycomputer-readable medium of claim 12, wherein the processor is acomponent of an edge device.
 20. The non-transitory computer-readablemedium of claim 12, wherein the instructions, when executed, cause theprocessor to cause storage of the first video chunk.